class Salida::BonificacionController < ApplicationController

  def list
  end
  
  def index
    list
    
    render :action => "list"
  end
  
  def new
    @orden = OrdenSalida.new
    ejecutivo = Ejecutivo.find(session[:user])
    @centros = ejecutivo.centros
    @presupuestos = Catalogo.find_by_nombre('Origen Presupuesto').entradas_catalogo
    @productos = Producto.find(:all, :conditions => {:empresa_id => 1, :status_id => 1}, :order => 'descripcion')
    @orden.orden_salida_detalles << OrdenSalidaDetalle.new(:costo_unitario => 0.0, :precio_ieps => 0.0, :precio_publico => 0.0)
    
  end
  
  def create
    @orden = OrdenSalida.new(params[:orden])
    @orden.tipo_presupuesto_id = Catalogo.valor_id('Origen Presupuesto', 'Bolsa')
    @orden.ejecutivo_id = session[:user]
    @orden.autorizar_id = Ejecutivo.find(session[:user]).reporta_a_id
    @orden.tipo_referencia = OrdenSalida::TIPO_REFERENCIA[:bonificacion_especie]
    @orden.presupuesto_suficiente = true
    @orden.status_id = 1
    
    if @orden.save
      flash[:notice] = "Orden de Salida Successfully created..."
      
      bf = BonificacionDetalle.new
      bf.centro_id = @orden.centro_id
      bf.importe = @orden.monto_total_precio_publico
      bf.operacion = BonificacionDetalle::CARGO
      bf.referencia = @orden.consecutivo
      bf.tipo_referencia = BonificacionDetalle::TIPO_REFERENCIA[:orden_salida]
      bf.destino_id = params[:bf][:destino_id]
      bf.fecha_bonificacion = Time.now

      bf.save
      
      # crear movimiento de salida en el almacen del usuario
      almacen = Almacen.find(Ejecutivo.find(session[:user]).almacen_id)
      
      movto_salida = MovimientoAlmacen.new({:almacen_id => almacen.id,
        :tipo_movimiento_id => MovimientoAlmacen::SALIDA,
        :user_id => session[:user],
        :referencia => "Orden de Salida #{@orden.consecutivo}"})
    
      @orden.orden_salida_detalles.each do |d|
        logger.debug "Producto: #{Producto.find(d.producto_id).descripcion}, Cantidad: #{d.cantidad}"
        
        movto_salida.item_movimientos << ItemMovimiento.new(
          :producto_id => d.producto_id,
          :user_id => session[:user],
          :unidad_medida_id => UnidadMedida::CAJA,
          :cantidad => d.cajas) unless d.cajas == 0
        logger.debug "Cajas: #{d.cajas}"
        
        movto_salida.item_movimientos << ItemMovimiento.new(
          :producto_id => d.producto_id,
          :user_id => session[:user],
          :unidad_medida_id => UnidadMedida::BOTELLA,
          :cantidad => d.botellas) unless d.botellas == 0
        logger.debug "Botellas: #{d.botellas}"
      end
      
      # actualizar existencias?
      movto_salida.save!
      
      redirect_to :controller => "/salida", :action => "list"
    else
      ejecutivo = Ejecutivo.find(session[:user])
      @centros = ejecutivo.centros
      @presupuestos = Catalogo.find_by_nombre('Origen Presupuesto').entradas_catalogo
      @productos = Producto.find(:all, :conditions => {:empresa_id => 1, :status_id => 1})
      
      render :action => "new"
    end
  end
  
  def centro_changed
    logger.debug "Params: #{params[:id]}"
    unless params[:id].nil?
      
      centro = Centro.find(params[:id])
      
      # bolsa
      bolsa_gastada = centro.bolsa_gastada
    
      bolsa_generada = centro.bolsa_generada
      
      saldo_bolsa = bolsa_generada - bolsa_gastada

      # especie
      especie_gastada = centro.especie_gastada
    
      especie_generada = centro.especie_generada
      
      saldo_especie = especie_generada - especie_gastada
    

      render :partial => 'presupuestos', :locals => {:saldo_bolsa => saldo_bolsa, :saldo_especie => saldo_especie}, :layout => false

    else
      render :text => '<div id="presupuestos">0</div>'
    end
    
  end
end
